/*
// Copyright (c) 2015 Intel Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
*/

(function () {

  'use strict';

  angular
    .module('satt')
    .directive('fixedscroll',fixedscroll);

  fixedscroll.$inject = ['$window', '$rootScope'];

  function fixedscroll($window, $rootScope) {
    return {
      //restrict: 'E',
      transclude: false,
      link: function (scope, el)
      {
        var window = angular.element($window),
            /*parent = angular.element(el.parent()),*/
            currentOffsetTop = el.offset().top,
            origCss = {
              position: 'static',
              /* width: getParentWidth()*/
            };

        handleSnapping();

        window.bind('scroll', function () {
          handleSnapping();
        });

        function handleSnapping() {
          // Calculate window positions to detect if element should be fixed or not
          var winScrollTop = (window).scrollTop();
          var insFlowDivOffsetTop = el.parent().parent().offset().top;
          var insBottom = insFlowDivOffsetTop + el.parent().parent().height();
          var callBottom = winScrollTop + el.height() + $rootScope.paddingTop;

          if (winScrollTop + $rootScope.paddingTop > insFlowDivOffsetTop &&
              winScrollTop > currentOffsetTop - $rootScope.paddingTop &&
              insBottom > callBottom)
          {
            var headerOffsetTop = $rootScope.paddingTop;
            el.css({
              position: 'fixed',
              top: headerOffsetTop + 'px',
            });
          } else {
            el.css(origCss);
          }
        }
      }
    };
  }
})();
